/*
 *  $Id: DeathStare.cs 975 2009-12-16 17:13:22Z thenn.erannor $
 *	This file is a part of Ragima CCG.
 *	(C) 2008-2009 Ragima development group.
 *
 *	Licensed under the terms of the GNU GPL License version 2.
 *
 */

namespace Ragima.Affects {
    /// <summary>
    /// Эффект: взгляд смерти
    /// Значение: минимум выпадания дайса
    /// Если дайс выпадает на Х или больше, вражеское существо мгновенно умирает.
    /// С каждым срабатыванием в течение одного хода шанс уменьшается 1.
    /// </summary>
    public class DeathStare: Affect {
        private static readonly Languages.Phrase Try = new Languages.Phrase("affect.death_stare.try");

        public readonly int Value;
        private int _currentValue;

        public DeathStare(int value) {
            Value = value;
            _currentValue = value;
        }

        public override string Id {
            get { return "death_stare"; }
        }
        public override string NameText {
            get { return Name.GetText(Value); }
        }

        public override int BaseWeight {
            get { return (7-Value) * 25; }
        }

        public override AffectIcon Icon {
            get { return AffectIcon.DeathStare; }
        }

        public override Affect Clone() {
            return new DeathStare(Value);
        }

        public override void SetAffect() {
            base.SetAffect();
            LocalSummary.DeathStare.Add(this);
            LocalSummary.OnStartOffencePhase += DoTurn;
        }
        public override void ResetAffect() {
            base.ResetAffect();
            LocalSummary.DeathStare.Remove(this);
            LocalSummary.OnStartOffencePhase -= DoTurn;
        }

        private void DoTurn() {
            _currentValue = Value;
        }

        public bool DoTry(Creature victim) {
            if (victim.HasFlag<Antimagic>()) return false;
            int dice = Game.Current.GetDiceNextValue();
            bool success = dice >= _currentValue;
            Game.Current.Log.Add(Try, Owner, victim, dice, Resources.Game.Success(success));
            if (success) _currentValue++;
            return success;
        }

        public static int Comparison(DeathStare a, DeathStare b) {
            return b.Value.CompareTo(a.Value);
        }
    }
}
